// 目标：定义二叉树节点并实现左子树插入方法
// TODO: 补全 insert_left 方法
#[derive(Debug, PartialEq)]
struct TreeNode {
    value: i32,
    left: Option<Box<TreeNode>>,
    right: Option<Box<TreeNode>>,
}

impl TreeNode {
    fn new(value: i32) -> Self {
        TreeNode {
            value,
            left: None,
            right: None,
        }
    }

    fn insert_left(&mut self, value: i32) {
        // 你的代码
	self.left = Some(Box::new(TreeNode::new(value)));
	// 左子树插入实现
    }
}

#[test]
fn test_tree_node() {
    let mut root = TreeNode::new(10);

    // 测试左子树插入
    root.insert_left(5);
    assert!(root.left.is_some());
    assert_eq!(root.left.as_ref().unwrap().value, 5);

    // 测试覆盖写入
    root.insert_left(7);
    assert_eq!(root.left.as_ref().unwrap().value, 7);
}

// 添加树结构可视化
fn main() {
    let mut root = TreeNode::new(50);
    root.insert_left(25);
    root.insert_left(30); // 覆盖左子树
    
    println!("Tree structure:");
    println!("Root: {}", root.value);
    if let Some(left) = &root.left {
        println!("├─ Left: {}", left.value);
    }
    if let Some(right) = &root.right {
        println!("└─ Right: {}", right.value);
    }
}
